ORGANIZATION_BLOCK OB 1
BEGIN

	// Check instance-DB length
	AUF		DB 1
	L		DBLG
	__ASSERT==	__ACCU 1,	22
	AUF		DB 0


	// Check TON
	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#0S,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	__ASSERT==	__ACCU 1,	0
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	__ASSERT==	__ACCU 1,	0
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT>=	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	1
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	__SLEEP		400
	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT>=	__ACCU 1,	400
	__ASSERT<	__ACCU 1,	500
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	1
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	400
	__ASSERT<	__ACCU 1,	500

	__SLEEP		250
	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	1
	L		MD 2
	__ASSERT==	__ACCU 1,	500
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	2
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	500

	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	500


	// Test: Interrupt IN before time elapsed
	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT>=	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	1
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	__SLEEP		100
	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	1
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150

	__SLEEP		100
	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150

	__SLEEP		500
	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150


	// Test: At PT=0 the timer is not started
	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#0MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	0	// IN will be forced low.

	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#0MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	0


	// Test: Negative PT causes an error condition (BIE=0)
	CALL	SFB 4, DB 1 (
		IN	:= TRUE,
		PT	:= T#-500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	0
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	1	// IN is not forced low.

	CALL	SFB 4, DB 1 (
		IN	:= FALSE,
		PT	:= T#-500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	0
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>	__ACCU 1,	50
	__ASSERT<	__ACCU 1,	150
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	0


	CALL SFC 46 // STOP CPU
END_ORGANIZATION_BLOCK


DATA_BLOCK DB 1
	SFB 4
BEGIN
END_DATA_BLOCK
